开源组成分析工具发展现状及建议
The following article is from 信息通信技术与政策 Author 李晓明,卫斌
1 引言
近些年开源热度持续增长,开源在为企业和个人赢得商业价值的同时也面临一系列的风险,开源许可证的兼容性问题、开源项目的合规问题、开源安全漏洞问题和开源知识产权的侵权等问题日趋凸显。2019年11月18日,美国专利组织Unified Patents公布的一项研究结果显示,在对2012年以来已经出现的约260个开源项目/平台的美国地区法院专利诉讼案件进行分析后,发现开源项目相关产品的专利诉讼有逐年增长的趋势[1]。企业需要对开源项目中存在的风险进行识别和盘点,开源组成分析工具应运而生。
2 国外开源组成分析工具的发展现状
国外的开源组成分析工具起步较早,技术较成熟,用户遍布全球并且占据国内大部分市场份额。国外的开源组成分析工具按照对识别对象的颗粒度不同大致分为开源组件级别和开源文件及代码片段级别。
2.1 开源组件级别开源组成分析工具
这类开源组成分析工具主要是对开源组件进行检测, 代表工具有Black Duck、CAST Highlight和Sonatype Nexus。Black Duck是一家美国公司推出的同名软件产品,于2002年上市,主要提供全面的软件组件分析(SCA)解决方案,用于管理在应用程序和容器中使用开源和第三方代码所带来的安全、质量和许可证合规性风险[2]。Black Duck可以集成到整个应用程序生命周期,也可以作为单独一款开源软件组成分析工具来使用;CAST Highlight是一家法国公司于2017年推出的开源软件组成分析工具,提供软件组件分析解决方案,其在分析开源软件的安全、许可证的风险之外还有单独一项功能是用于分析代码质量的,专注于分析编写代码的规范、语句等质量问题;SonatypeNexus是2008年由以色列开发的一款开源组成分析工具,该工具帮助软件开发团队安全使用开源,分析开源项目中的成分,可以使开发团队更快地发现并自动控制风险,该工具做到了自动化检测,不需要人工干预,并且关注整个开发运维流程。
2.2 开源文件及代码片段级别开源组成分析工具
这类开源组成分析工具主要是对开源文件或代码片段进行检测,代表工具有Fossid、Fossology。Fossid于2016年在瑞典诞生,区别于前三款工具,Fossid对开源代码片段进行比对和识别,可以帮助展示开源软件中的开源许可证以及相关的合规性,也能够发现并展示出开源软件存在的安全漏洞。Fossid拥有一个知识库,包含了超过3700 万的开源项目、超过70 亿的代码文件,设计安全漏洞的开源项目超过8000个;Fossology是2017年托管在Linux基金会安全与合规9个项目下的一个子项目,是一个开源的许可证扫描工具。用户可上传单个文件或者整个软件包作为一个工具包,通过自定义规则进行软件扫描,进行开源许可证识别,可用在对软件的开源许可证清点上。
3 国内开源组成分析工具的发展现状
国内开源组成分析工具基本是从2019年开始出现,一些传统的安全企业开始开拓开源组成分析业务,如奇安信的开源卫士;一些企业专注研发开源组成分析工具,如棱镜七彩的Fosseye、北大软件中心的Hobot等。奇安信开源卫士于2019年由奇安信推出,该产品是一款集开源软件识别和安全管控于一体的软件成分分析系统,通过云端分析中心在全球范围内获取开源软件信息和漏洞情报,利用自主研发的开源软件分析引擎为用户提供开源软件识别、开源软件漏洞分析及开源软件漏洞情报获取等功能,帮助行业用户掌握信息系统中的开源组件资产和漏洞情报,降低由开源软件带来的安全风险,保障交付更安全的软件;Fosseye在2019年上市,专注于识别开源组件级别的检测,只需要一个GitHub或码云托管平台的账号,就可以检测用户托管库中的开源项目,对开源项目进行盘点,检测开源组件、开源许可证和开源漏洞等信息;2019年,北京大学软件工程中心研发的一款指纹匹配的开源组成分析工具Hobot,可以从开源项目到开源组件再到开源文件最后到开源代码片段进行层层递进的指纹匹配,得到具体的开源组件信息,继而匹配到安全漏洞等信息。
4 开源组成分析工具检测原理
目前,市场上已经存在一些用于对开源代码组成及安全性进行分析的开源治理工具,总体来说可以分为以下5种类型。
(1)工具扫描开源软件源代码,通过进行源代码片段式比对来识别组件并识别许可证类型。此类工具扫描后得出的组件信息需要人工确认。
(2)工具不扫描开源软件源代码,对文件级别提取哈希值,进行文件级哈希值比对,若全部文件哈希值全部匹配成功则开源组件被识别出来。此类工具扫描后得出的组件信息是自动确认的。
(3)工具不扫描开源软件源代码,通过扫描包配置文件读取信息,进行组件识别从而识别组件并识别许可证类型。此类工具扫描后得出的组件信息是自动确认的。
(4)工具不扫描开源软件源代码,对开源项目的文件目录和结构进行解析,分析开源组件路径和开源组件依赖。此类工具扫描后得出的组件信息是自动确认的。
(5)工具不扫描开源软件源代码,通过编译开源项目并对编译后的开源项目进行依赖分析,这种方式可以识别用在开源项目中的开源组件信息。此类工具扫描后得出的组件信息是自动确认的。
上述5种识别技术的识别速度是依次增快的,并且组件物料清单的完整性也是依次增高的。源代码片段识别出的开源组件的数量较多,但因为源代码片段比对受行数和关键词位置影响,识别出的开源组件的误报率通常较高,且识别出的开源组件需要手动确认,对操作人员的技术能力要求较高;其他3类识别出的开源组件数量通常少于源代码片段识别,但因为哈希值的不变性,其识别出的开源组件的误报率较低,同时相比于开源代码片段识别,由于源代码被改写生成哈希值也会随之改变,因此漏报率通常比源代码片段识别高。
由于检测原理不同,导致不同的开源组成分析工具对同一个开源项目的扫描结果也各不相同。本文主要选取8款常用开源组成分析工具对开源项目Kubernetes 1.16.2版本[3]进行开源组成分析工具扫描对比,详情见表1。
表1 8个开源组成分析工具对Kubernetes 1.16.2版本的扫描结果
参考文献
[1] 中国科学院知识产权网. 美国发布开源相关专利诉讼报告[R/OL]. (2019-11-20) [2020-04-13]. http://www.casip.ac. cn/website/ipr/iprnewsview/2226.
[2] 萧萧. 微软开源CodePlex项目加入黑鸭子知识库[EB /OL].(2009-05-25)[2020-04-13].http://news. mydrivers.com/1/135/135520.htm.
[3] Kubernetes中文社区. Kubernetes v1.16重磅发布[R /OL].(2019-09-19)[2020-04-13].https:// www.kubernetes.org.cn/5838.html.
作者简介
李晓明
中国信息通信研究院云计算与大数据研究所云计算部工程师,主要从事开源方面的研究工作。
卫 斌
中国信息通信研究院云计算与大数据研究所云计算部工程师,主要从事云保险方面的研究工作。
论文引用格式:
李晓明,卫斌. 开源组成分析工具发展现状及建议[J]. 信息通信技术与政策, 2020(5):57-60.
本文刊于《信息通信技术与政策》2020年第5期
主办:中国信息通信研究院
《信息通信技术与政策》是工业和信息化部主管、中国信息通信研究院主办的专业学术期刊。本刊定位于“信息通信技术前沿的风向标,信息社会政策探究的思想库”,聚焦信息通信领域技术趋势、公共政策、 国家/产业/企业战略,发布前沿研究成果、焦点问题分析、热点政策解读等,推动5G、工业互联网、数字经济、人工智能、区块链、大数据、云计算等技术产业的创新与发展,引导国家技术战略选择与产业政策制定,搭建产、学、研、用的高端学术交流平台。
校 审 | 陈 力、珊 珊
编 辑 | 凌 霄
推荐阅读
《新基建》专辑
点亮在看共渡难关